package ucla.axelia.controlador.servicios;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.obelisco.modelo.data.DataGenerica;

import ucla.axelia.controlador.interfaces.IServicioAdministracionReporteProgramaInicioFin;
import ucla.axelia.modelo.dao.ServicioActividadPlanificadaDAO;
import ucla.axelia.modelo.dao.ServicioProgramaDAO;
import ucla.axelia.modelo.data.ActividadPlanificada;
import ucla.axelia.modelo.data.Programa;

public class ServicioAdministracionReporteActividadesEjecutadasPorPrograma
		implements IServicioAdministracionReporteProgramaInicioFin {

	private ServicioProgramaDAO servicioProgramaDAO;
	private ServicioActividadPlanificadaDAO servicioActividadPlanificadaDAO;
	
	@Override
	public List<Programa> buscarProgramas() {
		return servicioProgramaDAO.buscarTodos(DataGenerica.DATA_ACTIVO);
	}

	@Override
	public List<ActividadPlanificada> obtenerActividadesPorPrograma(Programa programa,
			Date fechaDesde, Date fechaHasta) {
		Session sesion = servicioActividadPlanificadaDAO.getSessionFactory().getCurrentSession();
		Query query = sesion.createQuery(
				"from ActividadPlanificada " +
				"where actividadEjecutada is not null " +
				"and actividad.programa = :programa " +
				"and actividadEjecutada.fechaInicioActividadEjecutada >= :fechaDesde " +
				"and actividadEjecutada.fechaFinActividadEjecutada <= :fechaHasta " +
				"and estado = :estado " +
				"order by actividad.nombreActividad");
		query.setEntity("programa", programa);
		query.setDate("fechaDesde", fechaDesde);
		query.setDate("fechaHasta", fechaHasta);
		query.setString("estado", DataGenerica.DATA_ACTIVO);
		return query.list();
	}

	
	// Getters y Setters
	
	public ServicioProgramaDAO getServicioProgramaDAO() {
		return servicioProgramaDAO;
	}

	public void setServicioProgramaDAO(ServicioProgramaDAO servicioProgramaDAO) {
		this.servicioProgramaDAO = servicioProgramaDAO;
	}

	public ServicioActividadPlanificadaDAO getServicioActividadPlanificadaDAO() {
		return servicioActividadPlanificadaDAO;
	}

	public void setServicioActividadPlanificadaDAO(
			ServicioActividadPlanificadaDAO servicioActividadPlanificadaDAO) {
		this.servicioActividadPlanificadaDAO = servicioActividadPlanificadaDAO;
	}
	
}
